<!doctype html>
<html lang="en">
<head>
    <title>Code coverage report for src/components/Engine/FrameworkAPP/ControlEngine.vue</title>
    <meta charset="utf-8" />
    <link rel="stylesheet" href="..\..\..\..\prettify.css" />
    <link rel="stylesheet" href="..\..\..\..\base.css" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style type='text/css'>
        .coverage-summary .sorter {
            background-image: url(..\..\..\..\sort-arrow-sprite.png);
        }
    </style>
</head>
<body>
<div class='wrapper'>
  <div class='pad1'>
    <h1>
      <a href="..\..\..\..\index.html">All files</a> / <a href="index.html">src/components/Engine/FrameworkAPP</a> ControlEngine.vue
    </h1>
    <div class='clearfix'>
      <div class='fl pad1y space-right2'>
        <span class="strong">0% </span>
        <span class="quiet">Statements</span>
        <span class='fraction'>0/138</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">0% </span>
        <span class="quiet">Branches</span>
        <span class='fraction'>0/101</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">0% </span>
        <span class="quiet">Functions</span>
        <span class='fraction'>0/32</span>
      </div>
      <div class='fl pad1y space-right2'>
        <span class="strong">0% </span>
        <span class="quiet">Lines</span>
        <span class='fraction'>0/138</span>
      </div>
    </div>
  </div>
  <div class='status-line low'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">&lt;template&gt;
  &lt;div v-if="data.controlTypeID != ''" class="OctopusAppControl"&gt;
    &lt;!-- TODO:由iControl识别验证通过与否返回控制内部控件的样式为最简单的方式。 --&gt;
    &lt;div class="iControl"
         v-bind:class="(data.validate?'':'iError ')+(data.disabled?'iDisabled ':'')+('C_'+data.controlTypeID)"&gt;
      &lt;!--  TODO: 利用下面的if判断控件类型，从而渲染不同的控件，vant针对特殊控件均进行了封装，需要在popup内部判断控件类型实现。--&gt;
      &lt;!-- 图像上传 | 文件上传 --&gt;
      &lt;template v-if="data.controlTypeID == 15 || data.controlTypeID == 16"&gt;
        &lt;!--        {{modelValue}} &lt;br&gt;||&lt;br&gt; {{uploadFileList}}--&gt;
        &lt;div&gt;{{data.displayName}}&lt;/div&gt;
        &lt;van-uploader :before-read="uploaderChange" :before-delete="uploaderBeforeRemove" @delete="uploaderRemove"
                      v-model="uploadFileList" :max-count="data.maxLength"/&gt;
      &lt;/template&gt;
      &lt;!-- 文本框 --&gt;
      &lt;template v-else-if="data.controlTypeID == 1"&gt;
        &lt;van-field v-model="modelValue" autosize show-word-limit v-on:input="change"
                   v-bind="{disabled:data.disabled || data.model != 'ITEM',type:'text',maxlength:data.maxLength,label:data.displayName}"/&gt;
      &lt;/template&gt;
      &lt;!-- 多行文本框 --&gt;
      &lt;template v-else-if="data.controlTypeID == 2"&gt;
        &lt;div&gt;{{data.displayName}}&lt;/div&gt;
        &lt;van-field v-model="modelValue" rows="5" autosize show-word-limit v-on:input="change"
                   v-bind="{disabled:data.disabled || data.model != 'ITEM',type:'textarea',maxlength:data.maxLength}"/&gt;
      &lt;/template&gt;
      &lt;!-- 数字框 | 小数点框 --&gt;
      &lt;template v-else-if="data.controlTypeID == 12 || data.controlTypeID == 13"&gt;
        &lt;van-cell :title="data.displayName"&gt;
          &lt;template slot="default" v-if="data.model == 'ITEM'"&gt;
            &lt;van-stepper v-model="modelValue" :disabled="data.disabled" step="1" :decimal-length="0" :min="data.minLength" :max="data.maxLength" input-width="80px" @change="change"/&gt;
          &lt;/template&gt;
          &lt;template slot="default" v-else&gt;
            {{modelValue}}
          &lt;/template&gt;
        &lt;/van-cell&gt;
      &lt;/template&gt;
      &lt;template v-else&gt;
        &lt;!--  van-cell 控件只能支持字符串输入，所以需要modelText来填充。--&gt;
        &lt;van-cell :title="data.displayName" :value="modelText?modelText:'请选择'" arrow-direction="down"
                  :is-link="!data.disabled &amp;&amp; data.model == 'ITEM'"
                  v-on:click="select"/&gt;
      &lt;/template&gt;
    &lt;/div&gt;
&nbsp;
&nbsp;
    &lt;div class="iControlPopup"&gt;
      &lt;van-popup v-model="showPopup" v-bind="{position:'bottom',class:'popup'}"&gt;
        &lt;!-- 日历框 | 日历时间框 --&gt;
        &lt;template v-if="data.controlTypeID == 5 || data.controlTypeID == 6 || data.controlTypeID == 17"&gt;
          &lt;van-datetime-picker v-model="modelTemp"
                               v-bind="{type:data.controlTypeID=='5'?'date':data.controlTypeID=='6'?'datetime':'year-month'}"
                               @confirm="selectByDateConfirm" @cancel="selectByClose"/&gt;
          &lt;!--            :min-date="new Date(2018,1,1)" :max-date="new Date(2020,1,1)"--&gt;
        &lt;/template&gt;
        &lt;template v-else&gt;
          &lt;div class="config"&gt;
            &lt;van-row&gt;
              &lt;van-col span="12"&gt;
                &lt;div class="cancel" @click="selectByClose"&gt;取消&lt;/div&gt;
              &lt;/van-col&gt;
              &lt;van-col span="12"&gt;
                &lt;div class="confirm" @click="selectByConfirm"&gt;确认&lt;/div&gt;
              &lt;/van-col&gt;
            &lt;/van-row&gt;
          &lt;/div&gt;
          &lt;!-- 下拉框 --&gt;
          &lt;template v-if="data.controlTypeID == 3"&gt;
            &lt;van-radio-group v-model="modelValue"&gt;
              &lt;van-cell-group&gt;
                &lt;van-cell v-for="(item, index) in requestData" :key="item.value" :title="item.label" clickable
                          @click="modelValue = item.value"&gt;
                  &lt;van-radio slot="right-icon" :name="item.value"/&gt;
                &lt;/van-cell&gt;
              &lt;/van-cell-group&gt;
            &lt;/van-radio-group&gt;
          &lt;/template&gt;
          &lt;!-- 复选下拉框 --&gt;
          &lt;template v-else-if="data.controlTypeID == 11"&gt;
            &lt;van-checkbox-group v-model="modelValue"&gt;
              &lt;van-cell-group&gt;
                &lt;van-cell v-for="(item, index) in requestData" clickable :key="item.value" :title="item.label"
                          @click="selectByListBoxCheck(index)"&gt;
                  &lt;van-checkbox :name="item.value" ref="requestListBox" slot="right-icon"/&gt;
                &lt;/van-cell&gt;
              &lt;/van-cell-group&gt;
            &lt;/van-checkbox-group&gt;
          &lt;/template&gt;
        &lt;/template&gt;
      &lt;/van-popup&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div v-else&gt;
    &lt;label class="iLabel iError"&gt;Control Type Is Not Found&lt;/label&gt;
  &lt;/div&gt;
&lt;/template&gt;
&nbsp;
&lt;script&gt;
  export default {
    name: 'ControlEngine', /* 这个name暂时不知道用啥用，根据官方文档说的是方便排错的 */
<span class="fstat-no" title="function not covered" >    data() {</span>
<span class="cstat-no" title="statement not covered" >      return {</span>
        octopus: this.$parent.octopus,
        // 这个属性待测试自定义model成功以后即可删除。
        dataExtend: null,
        // v-model模式必须使用value，这个是vue的保留字段，不能改名，内部已经通过prop属性传过来了。
        modelValue: this.value,
        modelText: "",
        modelTemp: null,
&nbsp;
&nbsp;
        showRequestPanel: false,// 查询面板是否展开。
        loading: false,
        requestData: [],
&nbsp;
        showPopup: false, // 上传控件预览面板显示
        uploadFileList: [],
        uploadFileMaxSize: 4096 * 1000,  // 文件最大大小，目前是 4MB。
&nbsp;
        // uploaderViewPath: '',   // 上传控件预览地址
        // uploadFileList: [],      // 上传控件文件清单列表
        // uploadFileMaxSize: 4096 * 1000,  // 文件最大大小，目前是 4MB。
      }
    },
<span class="fstat-no" title="function not covered" >    created: function () {</span>
<span class="cstat-no" title="statement not covered" >      this.init();</span>
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了created事件。");</span>
    },
    // 当前控件挂载完成以后调用，因为ControlEngine每次进来都会触发Created事件，所以mounted也是能被触发的。
<span class="fstat-no" title="function not covered" >    mounted: function () {</span>
<span class="cstat-no" title="statement not covered" >      this.validate();</span>
<span class="cstat-no" title="statement not covered" >      this.bind();</span>
      // console.log("data create:" + JSON.stringify(this.data));
      // 如果你希望整个同步DOM（不包含异步）都挂载完成，则需要写在nextTick事件中。
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >      this.$nextTick(function () {</span></span>
<span class="cstat-no" title="statement not covered" >        this.octopus.tips.debug("Control.vue执行了mounted.$nextTick事件。");</span>
      });
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了mounted事件。");</span>
    },
<span class="fstat-no" title="function not covered" >    beforeUpdate: function () {</span>
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了beforeUpdate事件。");</span>
    },
<span class="fstat-no" title="function not covered" >    updated: function () {</span>
      // 基于VUE的特性，当控件发生变化则触发验证。
<span class="cstat-no" title="statement not covered" >      this.validate();</span>
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了updated事件。");</span>
    },
    // 活动事件，写在这里的好处是不管是第一次创建还是后退回来，都会触发这个事件
    // 比较典型的就是列表组件，返回的时候往往是需要刷新的。
<span class="fstat-no" title="function not covered" >    activated: function () {</span>
      // this.$nextTick(function () {
      //   this.octopus.tips.debug("Control执行了activated.$nextTick事件。");
      // });
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了activated事件。");</span>
    },
<span class="fstat-no" title="function not covered" >    deactivated: function () {</span>
<span class="cstat-no" title="statement not covered" >      this.octopus.tips.debug("Control.vue执行了deactivated事件。");</span>
    },
    computed: {
      // 如果cellData数据发生了改变,则触发这个事件。
<span class="fstat-no" title="function not covered" >      chaeCell: function () {</span>
        // return this.data.id;
      },
    },
    methods: {
<span class="fstat-no" title="function not covered" >      init: function () {</span>
<span class="cstat-no" title="statement not covered" >        this.initData();</span>
      },
      // 初始化数据
<span class="fstat-no" title="function not covered" >      initData: function () {</span>
        // 记录变更，此处适配页面跳转进来，没有走监听的。
<span class="cstat-no" title="statement not covered" >        this.dataExtend = $.extend(true, {}, this.data);</span>
      },
      // 数据格式化及绑定，根据控件类型进行对应的数据修正，以及前端八爪鱼代码的解析，比如#{param=order}，则获取URL参数为orderID的值
      // 此处bind还会产生一个效果，就是原来vue的属性会自动隐藏掉。。。有点高级。。。。
<span class="fstat-no" title="function not covered" >      bind: function () {</span>
<span class="cstat-no" title="statement not covered" >        let o = this;</span>
<span class="cstat-no" title="statement not covered" >        let controlTypeID = this.data.controlTypeID;</span>
        // 如果值不为空，则发起请求和处理。否则没有必要，直接显示【请选择】
<span class="cstat-no" title="statement not covered" >        if (!this.octopus.tools.IsNullOrEmpty(this.modelValue)) {</span>
          // 初始化控件各种形态的默认数据。
<span class="cstat-no" title="statement not covered" >          if (controlTypeID == "3" || controlTypeID == "11") {</span>
            // 此方法要加上回调，获取到数据以后填充modelText，但是不会去变更影响 modelValue 对象。
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >            this.request("", this.modelValue, function (data) {</span></span>
              // 单选框
<span class="cstat-no" title="statement not covered" >              if (controlTypeID == "3") {</span>
<span class="cstat-no" title="statement not covered" >                data = data[0];</span>
<span class="cstat-no" title="statement not covered" >                o.modelText = data.label;</span>
              }
              // 复选框
              else {
<span class="cstat-no" title="statement not covered" >                o.modelText = "";</span>
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >                $(data).each(function (index, item) {</span></span>
<span class="cstat-no" title="statement not covered" >                  o.modelText += ", " + item.label;</span>
                });
<span class="cstat-no" title="statement not covered" >                o.modelText = o.modelText.length &gt; 1 ? o.modelText.substring(1) : "";</span>
              }
            });
          }
          // 日历控件 | 日历时间控件 Vant需要的是日期对象。
<span class="cstat-no" title="statement not covered" >          else if (controlTypeID == "5" || controlTypeID == "6" || controlTypeID == "17") {</span>
            // 初始化将日期字符串转成日期对象，由于赋值后日期会变成对象（vant要求），所以每次更新reload以后只能进来修改一次。
            // alert(typeof this.modelValue);
<span class="cstat-no" title="statement not covered" >            if (typeof this.modelValue == "string") {</span>
              // this.modelValue = new Date(this.modelValue.replace(/-/g, '/'));
<span class="cstat-no" title="statement not covered" >              this.modelValue = this.modelValue.replace(/-/g, '/');</span>
              // 采用临时变量设置Vant控件
<span class="cstat-no" title="statement not covered" >              this.modelTemp = new Date(this.modelValue);</span>
<span class="cstat-no" title="statement not covered" >              if (controlTypeID == "5") {</span>
<span class="cstat-no" title="statement not covered" >                this.modelText = this.octopus.tools.dateFormat(this.modelTemp, "yyyy-MM-dd");</span>
<span class="cstat-no" title="statement not covered" >              } else if (controlTypeID == "6") {</span>
<span class="cstat-no" title="statement not covered" >                this.modelText = this.octopus.tools.dateFormat(this.modelTemp, "yyyy-MM-dd HH:mm:ss");</span>
              } else {
<span class="cstat-no" title="statement not covered" >                this.modelText = this.octopus.tools.dateFormat(this.modelTemp, "yyyy-MM");</span>
              }
            }
          }
          // 图像上传框 | 文件上传框
          else if (controlTypeID == "15" || controlTypeID == "16") {
<span class="cstat-no" title="statement not covered" >            this.uploadFileList = JSON.parse(this.modelValue);</span>
          }
&nbsp;
        }
        // 如果值为空。
        else {
          // 如果复选框为空，则需要设置[】
<span class="cstat-no" title="statement not covered" >          if (controlTypeID == "11") {</span>
<span class="cstat-no" title="statement not covered" >            this.modelValue = [];</span>
<span class="cstat-no" title="statement not covered" >            this.modelText = "";</span>
          }
        }
      },
      // 完美解决自定义控件的问题！采用change曲线救国！！
<span class="fstat-no" title="function not covered" >      change: function (value) {</span>
        // 触发绑定事件
<span class="cstat-no" title="statement not covered" >        if (this.data.model == "LIST") {</span>
<span class="cstat-no" title="statement not covered" >          let key = (this.data.searchKey + "").toLocaleUpperCase();</span>
          // 如果是范围查询，扩展searchValue的数据值为2个。
<span class="cstat-no" title="statement not covered" >          if (key == "BETWEEN") {</span>
<span class="cstat-no" title="statement not covered" >            this.data.searchValue[this.index || 0] = value;</span>
          }
          // 否则由控件组成的数组是直接返回的。
          else {
<span class="cstat-no" title="statement not covered" >            this.data.searchValue = value;</span>
          }
&nbsp;
<span class="cstat-no" title="statement not covered" >          this.octopus.tips.debug("[change]" + this.data.name + " 的 [searchValue] 发生了变更，由 "</span>
            + JSON.stringify(this.dataExtend.searchValue) + " 变更为 " + JSON.stringify(this.data.searchValue));
        } else {
<span class="cstat-no" title="statement not covered" >          this.data.defaultValue = value;</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >          this.octopus.tips.debug("[change]" + this.data.name + " 的 [defaultValue] 发生了变更，由 "</span>
            + JSON.stringify(this.dataExtend.defaultValue) + " 变更为 " + JSON.stringify(this.data.defaultValue));
        }
&nbsp;
<span class="cstat-no" title="statement not covered" >        if (this.changed) {</span>
          // 范围比较时需要判断0和1都需要有值
<span class="cstat-no" title="statement not covered" >          if (this.data.searchKey == "BETWEEN") {</span>
            // 只有当2个值不一样，才触发。
<span class="cstat-no" title="statement not covered" >            if (!this.octopus.tools.IsNullOrEmpty(this.data.searchValue[0]) &amp;&amp; !this.octopus.tools.IsNullOrEmpty(this.data.searchValue[1])) {</span>
<span class="cstat-no" title="statement not covered" >              this.changed(this.data, this.dataExtend);</span>
            }
          } else {
<span class="cstat-no" title="statement not covered" >            this.changed(this.data, this.dataExtend);</span>
          }
        }
<span class="cstat-no" title="statement not covered" >        this.dataExtend = $.extend(true, {}, this.data);</span>
&nbsp;
      },
      // 解码、格式化、验证 多步一体。
<span class="fstat-no" title="function not covered" >      validate: function () {</span>
<span class="cstat-no" title="statement not covered" >        let control = $(this.$el);</span>
        // 状态默认开启
<span class="cstat-no" title="statement not covered" >        let result = true;</span>
        // 只有Item模式需要验证，List大多是下拉，模糊查询，所以没法做数据格式验证。
<span class="cstat-no" title="statement not covered" >        if (this.data.model == "ITEM") {</span>
          // 不允许非空，则判定。
<span class="cstat-no" title="statement not covered" >          if (!this.data.null) {</span>
<span class="cstat-no" title="statement not covered" >            if (this.octopus.tools.IsNullOrEmpty(this.modelValue)) {</span>
<span class="cstat-no" title="statement not covered" >              result = false;</span>
            } else {
              // 如果是图像上传
<span class="cstat-no" title="statement not covered" >              if (this.data.controlTypeID == "15" || this.data.controlTypeID == "16") {</span>
<span class="cstat-no" title="statement not covered" >                if (JSON.parse(this.modelValue).length == 0) {</span>
<span class="cstat-no" title="statement not covered" >                  result = false;</span>
                }
              }
            }
          }
          // 非空验证成功 并且 值不为空才进入，因为下面的验证都是针对数据的验证。
<span class="cstat-no" title="statement not covered" >          if (result &amp;&amp; !this.octopus.tools.IsNullOrEmpty(this.modelValue)) {</span>
            // 数据格式化，日期取消，因为会触发一次change事件，没有意义，故放到后台处理
            // 日历框
            // if (this.data.controlTypeID == 5) {
            //   if (!this.octopus.tools.IsNullOrEmpty(this.data.defaultValue)) {
            //     this.data.defaultValue = this.octopus.tools.dateFormatToString(controlValue, "yyyy-MM-dd");
            //   }
            // }
            // // 日历时间框
            // else if (this.data.controlTypeID == 6) {
            //   if (!this.octopus.tools.IsNullOrEmpty(this.data.defaultValue)) {
            //     this.data.defaultValue = this.octopus.tools.dateFormatToString(controlValue, "yyyy-MM-dd HH:mm:ss");
            //   }
            // }
            // 邮件验证
<span class="cstat-no" title="statement not covered" >            if (this.data.controlTypeID == 8) {</span>
<span class="cstat-no" title="statement not covered" >              let regex = /\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}/;</span>
<span class="cstat-no" title="statement not covered" >              result = regex.test(this.modelValue);</span>
            }
            // 邮政编码框验证
<span class="cstat-no" title="statement not covered" >            else if (this.data.controlTypeID == 9) {</span>
              // 正则表达式，^开头，$结束，[\d]纯数字，{6}限制6位长度，范围可通过{6,10}。
              // http://tools.jb51.net/regex/create_reg
<span class="cstat-no" title="statement not covered" >              let regex = /^[\d]{6}$/;</span>
              // 查看匹配项
              // console.log(parseData.match(regex));
              // 查看
<span class="cstat-no" title="statement not covered" >              result = regex.test(this.modelValue);</span>
            }
            // 网址验证
            else if (this.data.controlTypeID == 10) {
<span class="cstat-no" title="statement not covered" >              let regex = /^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+/;</span>
<span class="cstat-no" title="statement not covered" >              result = regex.test(this.modelValue);</span>
            }
            // // 数字框
            // else if (this.data.controlTypeID == 12) {
            //   let regex = /^[\d]*$/;
            //   result = regex.test(this.modelValue);
            // }
            // // 小数点框（浮点）
            // else if (this.data.controlTypeID == 13) {
            //   let regex = /^[\d]*[.]{1}[\d]*$/;
            //   result = regex.test(this.modelValue);
            // }
&nbsp;
            // 邮编框只能输入邮编
&nbsp;
&nbsp;
          }
&nbsp;
        }
        // LIST模式下禁止验证禁用，默认false
        else {
<span class="cstat-no" title="statement not covered" >          this.data.disabled = false;</span>
        }
&nbsp;
<span class="cstat-no" title="statement not covered" >        this.data.validate = result;</span>
      },
<span class="fstat-no" title="function not covered" >      select: function () {</span>
        // 如果是禁用状态，则不弹出面板。
<span class="cstat-no" title="statement not covered" >        if (!this.data.disabled &amp;&amp; this.data.model == 'ITEM') {</span>
          // 展开 popup 面板。
<span class="cstat-no" title="statement not covered" >          this.showPopup = true;</span>
&nbsp;
          // 下拉框 | 复选下拉框
<span class="cstat-no" title="statement not covered" >          if (this.data.controlTypeID == "3" || this.data.controlTypeID == "11") {</span>
            // APP端的下拉框，将执行全部请求。
<span class="cstat-no" title="statement not covered" >            this.request("", "");</span>
          }
        }
      },
<span class="fstat-no" title="function not covered" >      selectByDateConfirm: function (value) {</span>
<span class="cstat-no" title="statement not covered" >        this.modelValue = value;</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >        if (this.data.controlTypeID == "5") {</span>
<span class="cstat-no" title="statement not covered" >          this.modelText = this.octopus.tools.dateFormat(this.modelValue, "yyyy-MM-dd");</span>
<span class="cstat-no" title="statement not covered" >          this.modelValue = this.modelText;</span>
<span class="cstat-no" title="statement not covered" >        } else if (this.data.controlTypeID == "6") {</span>
<span class="cstat-no" title="statement not covered" >          this.modelText = this.octopus.tools.dateFormat(this.modelValue, "yyyy-MM-dd HH:mm:ss");</span>
<span class="cstat-no" title="statement not covered" >          this.modelValue = this.modelText;</span>
        } else {
<span class="cstat-no" title="statement not covered" >          this.modelText = this.octopus.tools.dateFormat(this.modelValue, "yyyy-MM");</span>
<span class="cstat-no" title="statement not covered" >          this.modelValue = this.modelText + "-1";</span>
        }
&nbsp;
<span class="cstat-no" title="statement not covered" >        this.change(this.modelValue);</span>
<span class="cstat-no" title="statement not covered" >        this.selectByClose();</span>
      },
<span class="fstat-no" title="function not covered" >      selectByListBoxCheck: function (index) {</span>
<span class="cstat-no" title="statement not covered" >        this.$refs.requestListBox[index].toggle();</span>
      },
<span class="fstat-no" title="function not covered" >      selectByConfirm: function () {</span>
        // 发起变更请求
<span class="cstat-no" title="statement not covered" >        this.change(this.modelValue);</span>
        // 关闭面板
<span class="cstat-no" title="statement not covered" >        this.selectByClose();</span>
      },
<span class="fstat-no" title="function not covered" >      selectByClose: function () {</span>
<span class="cstat-no" title="statement not covered" >        this.showPopup = false;</span>
      },
      // 请求
<span class="fstat-no" title="function not covered" >      request: function (labelData, valueData, callback) {</span>
        // console.log("========name:" + this.data.name + "[" + labelData + "][" + valueData + "]");
<span class="cstat-no" title="statement not covered" >        let o = this;</span>
<span class="cstat-no" title="statement not covered" >        this.loading = true;</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >        let control_request_celldata;</span>
        // 自动化封装
<span class="cstat-no" title="statement not covered" >        if (!this.octopus.tools.IsNullOrEmpty(labelData)) {</span>
<span class="cstat-no" title="statement not covered" >          control_request_celldata = [{</span>
            name: this.data.controlSourceText, searchKey: "LIKE", searchValue: labelData
          }, {name: this.data.controlSourceValue}];
<span class="cstat-no" title="statement not covered" >        } else if (!this.octopus.tools.IsNullOrEmpty(valueData)) {</span>
<span class="cstat-no" title="statement not covered" >          control_request_celldata = [{</span>
            name: this.data.controlSourceText
          }, {name: this.data.controlSourceValue, searchKey: "IN", searchValue: valueData}];
        } else {
<span class="cstat-no" title="statement not covered" >          control_request_celldata = [{</span>
            name: this.data.controlSourceText
          }, {name: this.data.controlSourceValue}]
        }
&nbsp;
        // 判断是否有关联数据，如果有则进行数据过滤。
<span class="cstat-no" title="statement not covered" >        if (this.data.link) {</span>
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >          $(this.data.link).each(function (index, item) {</span></span>
            // 判断值是否存在，如果不存在，则设置为-1，保证查不到数据。
<span class="cstat-no" title="statement not covered" >            item.value = o.octopus.tools.IsNullOrEmpty(item.value) ? -1 : item.value;</span>
            // 得益于八抓鱼API框架，后台处理参数时，会自动识别 值 和 数组，所以这里直接赋值就可以了。
<span class="cstat-no" title="statement not covered" >            control_request_celldata.push({name: item.mapping, searchKey: "IN", searchValue: item.value});</span>
&nbsp;
            //alert(JSON.stringify(control_request_celldata));
          });
        }
&nbsp;
        // 请求后台八爪鱼API框架。
<span class="cstat-no" title="statement not covered" >        this.octopus.request.api.post("/Octopus/Engine/List", {</span>
            id: this.data.controlSourceID,
            // 当 data.model 不存在时，采用树状请求模式，存在值时，采用标准模式。
            parentKey: this.data.model == undefined ? this.data.controlSourceParentKey : null,
            parentValue: this.data.model == undefined ? this.data.controlSourceParentValue : null,
            orderData: this.data.controlSourceOrder,
            cellData: control_request_celldata,
            pageData: {rowSize: 1000}, // APP端，全部显示。
          },
          // 处理回调事件，通过分析data.status.code的状态来实现。
<span class="fstat-no" title="function not covered" >          function (result) {</span>
<span class="cstat-no" title="statement not covered" >            if (result.status.code == 200) {</span>
<span class="cstat-no" title="statement not covered" >              o.requestData = [];</span>
              // 回调封装数据
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >              $(result.content.queryData).each(function (index, item) {</span></span>
                // 因为ElementUI识别数据类型，所以为了全适配，text和value必须都为String类型，否则会因为类型不正确匹配不上，切记。
<span class="cstat-no" title="statement not covered" >                o.requestData.push({</span>
                  label: item[o.data.controlSourceText],
                  // 因为Element-UI框架的问题，必须字符串，否则不能默认绑定。。。好傻。。所以要转换一下。
                  value: item[o.data.controlSourceValue].toString()
                });
              });
&nbsp;
<span class="cstat-no" title="statement not covered" >              if (callback) {</span>
<span class="cstat-no" title="statement not covered" >                callback(o.requestData);</span>
              }
            } else {
<span class="cstat-no" title="statement not covered" >              o.octopus.tips.error(result);</span>
            }
            // 告诉控件，异步请求已经完成
<span class="cstat-no" title="statement not covered" >            o.loading = false;</span>
          });
      },
<span class="fstat-no" title="function not covered" >      uploaderChange: function (file) {</span>
<span class="cstat-no" title="statement not covered" >        let o = this;</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >        this.octopus.request.api.upload({file: file, size: 720},</span>
          // before：上传之前事件，返回值：compressFile，压缩后的file文件，如果函数返回false，则不会执行上传动作，也不会回调completed事件。
<span class="fstat-no" title="function not covered" >          function (compressFile) {</span>
            // 如果压缩以后小于4M就返回，否则返回失败。
<span class="cstat-no" title="statement not covered" >            if (compressFile.size &lt; 4096 * 1024) {</span>
<span class="cstat-no" title="statement not covered" >              return true;</span>
            } else {
<span class="cstat-no" title="statement not covered" >              o.octopus.tips.error("图像不能超过4M，上传失败。");</span>
<span class="cstat-no" title="statement not covered" >              return false;</span>
            }
          },
          // completed
<span class="fstat-no" title="function not covered" >          function (data) {</span>
<span class="cstat-no" title="statement not covered" >            if (data.status.code == 200) {</span>
<span class="cstat-no" title="statement not covered" >              o.uploadFileList.push({</span>
                url: o.octopus.config.url + data.content.url,
                name: data.content.name,
                isImage: true
              });
<span class="cstat-no" title="statement not covered" >              o.change(JSON.stringify(o.uploadFileList));</span>
            }
          });
&nbsp;
        // 不管成功与否，都终止，用于防止vant操作fileList。
<span class="cstat-no" title="statement not covered" >        return false;</span>
      },
      // 删除时触发
<span class="fstat-no" title="function not covered" >      uploaderRemove(file) {</span>
        // console.log(file);
        // console.log(fileList);
<span class="cstat-no" title="statement not covered" >        this.modelValue = JSON.stringify(this.uploadFileList);</span>
<span class="cstat-no" title="statement not covered" >        this.octopus.tips.warning("移除了图像：" + file.name + "。");</span>
      },
<span class="fstat-no" title="function not covered" >      uploaderBeforeRemove(file, fileList) {</span>
<span class="cstat-no" title="statement not covered" >        return this.$confirm(`确定移除图像： ${file.name}？`);</span>
      },
    },
    watch: {
      // 监听value，因为有时候控件是二次绑定的，所以需要监听重新绑定，算是个vue的小缺陷吧。
<span class="fstat-no" title="function not covered" >      value(newv, oldv) {</span>
<span class="cstat-no" title="statement not covered" >        console.log("[change][watch]" + this.data.name + ":" + oldv + "==&gt;" + newv);</span>
        // 此处的更新和行：58 一致。
<span class="cstat-no" title="statement not covered" >        this.modelValue = newv;</span>
        // 记录变更，此处适配当前页弹出的，没有走created.init()的。
<span class="cstat-no" title="statement not covered" >        this.dataExtend = $.extend(true, {}, this.data);</span>
&nbsp;
        // 如果值发生更改，且下拉框或者复选框，则需要重新绑定数据源。
<span class="cstat-no" title="statement not covered" >        if (this.data.controlTypeID == "3" || this.data.controlTypeID == "11") {</span>
          // 如果值不为空 并且 查询面板是关闭状态，才有查询的意义，且还涉及到item和list控件的reload问题，因为reload以后，value必然为空。
          // if (!this.octopus.tools.IsNullOrEmpty(this.modelValue) &amp;&amp; !this.showRequestPanel) {
          //   this.request("", this.modelValue);
          //   // 此处应该要调用方法改变modelText的值，重新绑定。
          // }
        }
        // 图像上传控件 || 文件上传控件
        else if (this.data.controlTypeID == "15" || this.data.controlTypeID == "16") {
<span class="cstat-no" title="statement not covered" >          if (this.octopus.tools.IsNullOrEmpty(this.modelValue)) {</span>
<span class="cstat-no" title="statement not covered" >            this.uploadFileList = [];</span>
          } else {
<span class="cstat-no" title="statement not covered" >            this.uploadFileList = JSON.parse(this.modelValue);</span>
          }
        }
&nbsp;
        // 因为Vant控件是分离的，所以这里重新bind就行了。
<span class="cstat-no" title="statement not covered" >        this.bind();</span>
      },
      // 针对一些妖孽的控件会在初创的生命周期时自动绑定值，此时change是感知不到的，需要这里反馈一下。
<span class="fstat-no" title="function not covered" >      modelValue(newv, oldv) {</span>
        // 仅适用于ITEM，List有bug，需要调整，估计也是因为这个原因，0无法清空。
<span class="cstat-no" title="statement not covered" >        if (this.data.model == "ITEM") {</span>
<span class="cstat-no" title="statement not covered" >          if (this.modelValue != this.data.defaultValue) {</span>
<span class="cstat-no" title="statement not covered" >            this.change(this.modelValue);</span>
          }
        }
      }
    },
    // 此处value一定要加，虽然是vue的保留符。
    props: ["data", "index", "changed", "value"]
  }
&nbsp;
&lt;/script&gt;
&nbsp;
&lt;!--1	TextBox	文本框                  【支持】--&gt;
&lt;!--2	TextArea	多行文本框            【支持】--&gt;
&lt;!--3	DropDownList	异步下拉框        【用用户表测试】--&gt;
&lt;!--4	Label	标签框                    【支持】--&gt;
&lt;!--5	Calendar	日历框                【支持】--&gt;
&lt;!--6	CalendarTime	日历时间框        【支持】--&gt;
&lt;!--7	TreeList	树状下拉框            【用用户表测试】--&gt;
&lt;!--8	EmailBox	邮件框                【支持】--&gt;
&lt;!--9	ZipCodeBox	邮编框              【支持】--&gt;
&lt;!--10	HttpBox	网址框                【支持】--&gt;
&lt;!--11	MultipleDownList	异步多选框  【用用户表测试】--&gt;
&lt;!--12	IntegerBox	数字框            【支持】--&gt;
&lt;!--13	FloatBox	小数点框            【支持】--&gt;
&lt;!--14  IDCardBox 身份证框            【用用户表测试】--&gt;
&lt;!--手机号码框--&gt;
&lt;!--电话号码--&gt;
&lt;!--单选框、复选框待开发--&gt;
&nbsp;</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
  Code coverage
  generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Jan 20 2020 17:54:15 GMT+0800 (GMT+08:00)
</div>
</div>
<script src="..\..\..\..\prettify.js"></script>
<script>
window.onload = function () {
        if (typeof prettyPrint === 'function') {
            prettyPrint();
        }
};
</script>
<script src="..\..\..\..\sorter.js"></script>
</body>
</html>
